32-bit entries.
Signed-off-by: Keir Fraser <keir@xensource.com>
shared_info_t *HYPERVISOR_shared_info = (shared_info_t *)empty_zero_page;
EXPORT_SYMBOL(HYPERVISOR_shared_info);
-unsigned int *phys_to_machine_mapping, *pfn_to_mfn_frame_list;
+unsigned long *phys_to_machine_mapping, *pfn_to_mfn_frame_list;
EXPORT_SYMBOL(phys_to_machine_mapping);
/* Raw start-of-day parameters from the hypervisor. */
}
#endif
- phys_to_machine_mapping = (unsigned int *)xen_start_info->mfn_list;
+ phys_to_machine_mapping = (unsigned long *)xen_start_info->mfn_list;
}
/*
/* Make sure we have a correctly sized P->M table. */
if (max_pfn != xen_start_info->nr_pages) {
phys_to_machine_mapping = alloc_bootmem_low_pages(
- max_pfn * sizeof(unsigned int));
+ max_pfn * sizeof(unsigned long));
if (max_pfn > xen_start_info->nr_pages) {
/* set to INVALID_P2M_ENTRY */
memset(phys_to_machine_mapping, ~0,
- max_pfn * sizeof(unsigned int));
+ max_pfn * sizeof(unsigned long));
memcpy(phys_to_machine_mapping,
- (unsigned int *)xen_start_info->mfn_list,
- xen_start_info->nr_pages * sizeof(unsigned int));
+ (unsigned long *)xen_start_info->mfn_list,
+ xen_start_info->nr_pages * sizeof(unsigned long));
} else {
struct xen_memory_reservation reservation = {
.extent_start = (unsigned long *)xen_start_info->mfn_list + max_pfn,
};
memcpy(phys_to_machine_mapping,
- (unsigned int *)xen_start_info->mfn_list,
- max_pfn * sizeof(unsigned int));
- /* N.B. below relies on sizeof(int) == sizeof(long). */
+ (unsigned long *)xen_start_info->mfn_list,
+ max_pfn * sizeof(unsigned long));
BUG_ON(HYPERVISOR_memory_op(
XENMEM_decrease_reservation,
&reservation) !=
free_bootmem(
__pa(xen_start_info->mfn_list),
PFN_PHYS(PFN_UP(xen_start_info->nr_pages *
- sizeof(unsigned int))));
+ sizeof(unsigned long))));
}
pfn_to_mfn_frame_list = alloc_bootmem_low_pages(PAGE_SIZE);
- for ( i=0, j=0; i < max_pfn; i+=(PAGE_SIZE/sizeof(unsigned int)), j++ )
+ for ( i=0, j=0; i < max_pfn; i+=(PAGE_SIZE/sizeof(unsigned long)), j++ )
{
pfn_to_mfn_frame_list[j] =
virt_to_mfn(&phys_to_machine_mapping[i]);
extern void time_suspend(void);
extern void time_resume(void);
extern unsigned long max_pfn;
- extern unsigned int *pfn_to_mfn_frame_list;
+ extern unsigned long *pfn_to_mfn_frame_list;
#ifdef CONFIG_SMP
extern void smp_suspend(void);
{
int i;
- phys_to_machine_mapping = (u32 *)xen_start_info->mfn_list;
+ phys_to_machine_mapping = (unsigned long *)xen_start_info->mfn_list;
start_pfn = (__pa(xen_start_info->pt_base) >> PAGE_SHIFT) +
xen_start_info->nr_pt_frames;
/* Allows setting of maximum possible memory size */
unsigned long xen_override_max_pfn;
-u32 *phys_to_machine_mapping, *pfn_to_mfn_frame_list;
+unsigned long *phys_to_machine_mapping, *pfn_to_mfn_frame_list;
EXPORT_SYMBOL(phys_to_machine_mapping);
/* Make sure we have a large enough P->M table. */
if (end_pfn > xen_start_info->nr_pages) {
phys_to_machine_mapping = alloc_bootmem(
- end_pfn * sizeof(u32));
+ end_pfn * sizeof(unsigned long));
memset(phys_to_machine_mapping, ~0,
- end_pfn * sizeof(u32));
+ end_pfn * sizeof(unsigned long));
memcpy(phys_to_machine_mapping,
- (u32 *)xen_start_info->mfn_list,
- xen_start_info->nr_pages * sizeof(u32));
+ (unsigned long *)xen_start_info->mfn_list,
+ xen_start_info->nr_pages * sizeof(unsigned long));
free_bootmem(
__pa(xen_start_info->mfn_list),
PFN_PHYS(PFN_UP(xen_start_info->nr_pages *
- sizeof(u32))));
+ sizeof(unsigned long))));
}
pfn_to_mfn_frame_list = alloc_bootmem(PAGE_SIZE);
- for ( i=0, j=0; i < end_pfn; i+=(PAGE_SIZE/sizeof(u32)), j++ )
- pfn_to_mfn_frame_list[j] =
+ for ( i=0, j=0; i < end_pfn; i+=(PAGE_SIZE/sizeof(unsigned long)), j++ )
+ pfn_to_mfn_frame_list[j] =
virt_to_mfn(&phys_to_machine_mapping[i]);
}
#endif
#define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
/**** MACHINE <-> PHYSICAL CONVERSION MACROS ****/
-#define INVALID_P2M_ENTRY (~0U)
-#define FOREIGN_FRAME(m) ((m) | 0x80000000U)
-extern unsigned int *phys_to_machine_mapping;
+#define INVALID_P2M_ENTRY (~0UL)
+#define FOREIGN_FRAME(m) ((m) | (1UL<<31))
+extern unsigned long *phys_to_machine_mapping;
#define pfn_to_mfn(pfn) \
-((unsigned long)phys_to_machine_mapping[(unsigned int)(pfn)] & 0x7FFFFFFFUL)
+(phys_to_machine_mapping[(unsigned int)(pfn)] & ~(1UL<<31))
static inline unsigned long mfn_to_pfn(unsigned long mfn)
{
- unsigned int pfn;
+ unsigned long pfn;
/*
* The array access can fail (e.g., device space beyond end of RAM).
".previous"
: "=r" (pfn) : "m" (machine_to_phys_mapping[mfn]) );
- return (unsigned long)pfn;
+ return pfn;
}
/* Definitions for machine and pseudophysical addresses. */
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
/**** MACHINE <-> PHYSICAL CONVERSION MACROS ****/
-#define INVALID_P2M_ENTRY (~0U)
-#define FOREIGN_FRAME(m) ((m) | 0x80000000U)
-extern u32 *phys_to_machine_mapping;
+#define INVALID_P2M_ENTRY (~0UL)
+#define FOREIGN_FRAME(m) ((m) | (1UL<<63))
+extern unsigned long *phys_to_machine_mapping;
#define pfn_to_mfn(pfn) \
-((unsigned long)phys_to_machine_mapping[(unsigned int)(pfn)] & 0x7FFFFFFFUL)
+(phys_to_machine_mapping[(unsigned int)(pfn)] & ~(1UL << 63))
static inline unsigned long mfn_to_pfn(unsigned long mfn)
{
- unsigned int pfn;
+ unsigned long pfn;
/*
* The array access can fail (e.g., device space beyond end of RAM).
* but we must handle the fault without crashing!
*/
asm (
- "1: movl %1,%k0\n"
+ "1: movq %1,%0\n"
"2:\n"
".section __ex_table,\"a\"\n"
" .align 8\n"
".previous"
: "=r" (pfn) : "m" (machine_to_phys_mapping[mfn]) );
- return (unsigned long)pfn;
+ return pfn;
}
/* Definitions for machine and pseudophysical addresses. */
#define pte_pfn(_pte) \
({ \
unsigned long mfn = pte_mfn(_pte); \
- unsigned pfn = mfn_to_pfn(mfn); \
+ unsigned long pfn = mfn_to_pfn(mfn); \
if ((pfn >= max_mapnr) || (phys_to_machine_mapping[pfn] != mfn))\
pfn = max_mapnr; /* special: force !pfn_valid() */ \
pfn; \
unsigned long nr_pt_pages;
unsigned long physmap_pfn;
- u32 *physmap, *physmap_e;
+ unsigned long *physmap, *physmap_e;
struct load_funcs load_funcs;
struct domain_setup_info dsi;
vinitrd_start = round_pgup(dsi.v_end);
vinitrd_end = vinitrd_start + initrd_len;
vphysmap_start = round_pgup(vinitrd_end);
- vphysmap_end = vphysmap_start + (nr_pages * sizeof(u32));
+ vphysmap_end = vphysmap_start + (nr_pages * sizeof(unsigned long));
vstartinfo_start = round_pgup(vphysmap_end);
vstartinfo_end = vstartinfo_start + PAGE_SIZE;
vpt_start = vstartinfo_end;
if ( !opt_dom0_translate && (pfn > REVERSE_START) )
mfn = alloc_epfn - (pfn - REVERSE_START);
#endif
- ((u32 *)vphysmap_start)[pfn] = mfn;
+ ((unsigned long *)vphysmap_start)[pfn] = mfn;
set_pfn_from_mfn(mfn, pfn);
}
while ( pfn < nr_pages )
#ifndef NDEBUG
#define pfn (nr_pages - 1 - (pfn - (alloc_epfn - alloc_spfn)))
#endif
- ((u32 *)vphysmap_start)[pfn] = mfn;
+ ((unsigned long *)vphysmap_start)[pfn] = mfn;
set_pfn_from_mfn(mfn, pfn);
#undef pfn
page++; pfn++;
((type & PGT_type_mask) != PGT_l1_page_table) )
MEM_LOG("Bad type (saw %" PRtype_info
"!= exp %" PRtype_info ") "
- "for mfn %lx (pfn %x)",
+ "for mfn %lx (pfn %lx)",
x, type, page_to_pfn(page),
get_pfn_from_mfn(page_to_pfn(page)));
return 0;
* Allocate and map the machine-to-phys table and create read-only mapping
* of MPT for guest-OS use.
*/
- mpt_size = (max_page * 4) + (1UL << L2_PAGETABLE_SHIFT) - 1UL;
+ mpt_size = (max_page * BYTES_PER_LONG) + (1UL << L2_PAGETABLE_SHIFT) - 1;
mpt_size &= ~((1UL << L2_PAGETABLE_SHIFT) - 1UL);
for ( i = 0; i < (mpt_size >> L2_PAGETABLE_SHIFT); i++ )
{
* Allocate and map the machine-to-phys table.
* This also ensures L3 is present for fixmaps.
*/
- mpt_size = (max_page * 4) + (1UL << L2_PAGETABLE_SHIFT) - 1UL;
+ mpt_size = (max_page * BYTES_PER_LONG) + (1UL << L2_PAGETABLE_SHIFT) - 1;
mpt_size &= ~((1UL << L2_PAGETABLE_SHIFT) - 1UL);
for ( i = 0; i < (mpt_size >> L2_PAGETABLE_SHIFT); i++ )
{
* contiguous (or near contiguous) physical memory.
*/
#undef machine_to_phys_mapping
-#define machine_to_phys_mapping ((u32 *)RDWR_MPT_VIRT_START)
-#define INVALID_M2P_ENTRY (~0U)
-#define VALID_M2P(_e) (!((_e) & (1U<<31)))
+#define machine_to_phys_mapping ((unsigned long *)RDWR_MPT_VIRT_START)
+#define INVALID_M2P_ENTRY (~0UL)
+#define VALID_M2P(_e) (!((_e) & (1UL<<(BITS_PER_LONG-1))))
#define IS_INVALID_M2P_ENTRY(_e) (!VALID_M2P(_e))
#define set_pfn_from_mfn(mfn, pfn) (machine_to_phys_mapping[(mfn)] = (pfn))
# define HYPERVISOR_VIRT_START (0xFC000000UL)
#endif
#ifndef machine_to_phys_mapping
-#define machine_to_phys_mapping ((u32 *)HYPERVISOR_VIRT_START)
+#define machine_to_phys_mapping ((unsigned long *)HYPERVISOR_VIRT_START)
#endif
/* Maximum number of virtual CPUs in multi-processor guests. */
/* The machine->physical mapping table starts at this address, read-only. */
#ifndef machine_to_phys_mapping
-#define machine_to_phys_mapping ((u32 *)HYPERVISOR_VIRT_START)
+#define machine_to_phys_mapping ((unsigned long *)HYPERVISOR_VIRT_START)
#endif
/*